앙상블 학습(Ensemble learning)앙상블 학습의 목표는 여러 분류기를 하나의 메타 분류기로 연결하여 개별 분류기 보다 더 좋은 일반화 성능을 달성하는 것이다.
과반수 투표(majority voting)분류기의 과반수가 예측한 클래스 레이블을 선택하는 단순한 앙상블 학습 방법이다.
50%이상 투표를 받은 클래스 레이블을 선택한다.
(다중 클래스 문제에서 이를 다수결 투표(plurality voting)라고 한다.)
이 때 가장 많은 투표-최빈값(mode) 를 받은 클래스 레이블을 선택하면 된다.
과반수 투표-이진 분류
다수결 투표-다중 분류
Process of majority voting
훈련 데이터셋을 사용해서 m개의 서로 다른 분류기를 훈련
(결정트리, 서포트 벡터 머신, 로지스틱 회귀 분류기 등 여러 가지 알고리즘을 사용하여 앙상블을 구축하던지,
같은 부류 알고리즘을 사용하여 훈련 데이터셋의 부분 집합을 달리하여 학습할 수 있다.)
랜덤 포레스트(Random Forest)는 가장 유명한 앙상블 방법이다.
앙상블의 오차율
P(y>=k)=sigma[ (nCk) err^k(1-err)^(n-k) ]
앙상블의 오차율은 위와 같이 계산할 수 있다.
하나의 예측이 틀릴 확율을 0.25라고 하면(err=0.25)
분류기 11개(n=11)로 구성된 앙상블의 에러율은 0.034로 훨씬 작다.
from scipy.special import comb
import math
def ensemble_error(n_classifier, error):
k_start=int(math.ceil(n_classifier/2.0))
probs=[comb(n_classifier, k)*error**k*(1-error)**(n_classifier-k) for k in range(k_start, n_classifier+1)]
return sum(probs)
ensemble_error(n_classifier=11, error=0.25)
import numpy as np
import matplotlib.pyplot as plt
error_range=np.arange(0.0, 1.01, 0.01)
ens_errors=[ensemble_error(n_classifier=11, error=error) for error in error_range]
plt.plot(error_range, ens_errors, label='Ensemble error', linewidth=2)
plt.plot(error_range, error_range, linestyle='--', label='Base error', linewidth=2)
plt.xlabel('Base error')
plt.ylabel('Base/Ensemble error')
plt.lengend(loc='upper left')
plt.grid(alpha=0.5)
plt.show()
base error가 0.5보다 낮을 시(분류기가 무작위 추측보다 성능이 좋을 시) 앙상블 에러의 에러 확률이 더 낮다.